#include <iostream>
#include <initializer_list>

using namespace std;

struct Mat4
{
	static constexpr Mat4 identity;

	float _data[4][4] = {};
public:

	Mat4()
	{
		*this = Mat4::identity;
	}

	Mat4(std::initializer_list<std::initializer_list<float>> il)
	{
		int i = 0;
		for (auto& arr : il)
		{
			if (i >= 4)
				break;

			auto& arrData = _data[i++];
			int j = 0;
			for (auto f : arr)
			{
				if (j >= 4)
					break;

				arrData[j++] = f;
			}
		}
	}

	Mat4(float inMat[4][4])
	{
		memcpy(_data, inMat, 16 * sizeof(float));
	}
};
constexpr Mat4 Mat4::identity =
{
	{ 1.0f, 0.0f, 0.0f, 0.0f },
	{ 0.0f, 1.0f, 0.0f, 0.0f },
	{ 0.0f, 0.0f, 1.0f, 0.0f },
	{ 0.0f, 0.0f, 0.0f, 1.0f }
};

int main()
{
	for (auto& arr : Mat4::identity._data)
	{
		cout << endl;
		for (auto f : arr)
			cout << f << " ";
	}


	return 0;
}